package models

import (
	"gorm.io/gorm"
	"order-srv/basic/inits"
	"time"
)

// Address 表示收货地址信息
type Address struct {
	Id            uint           `gorm:"column:id;type:bigint UNSIGNED;comment:主键自增;primaryKey;not null;" json:"id"`                               // 主键自增
	UserId        uint           `gorm:"column:user_id;type:bigint UNSIGNED;comment:关联的用户ID，用于标识该地址属于哪个用户;not null;" json:"user_id"`               // 关联的用户ID，用于标识该地址属于哪个用户
	RecipientName string         `gorm:"column:recipient_name;type:varchar(30);comment:收件人姓名，接收货物的人员姓名;not null;" json:"recipient_name"`           // 收件人姓名，接收货物的人员姓名
	Mobile        string         `gorm:"column:mobile;type:char(11);comment:收件人联系电话，用于配送时联系;not null;" json:"mobile"`                              // 收件人联系电话，用于配送时联系
	Province      string         `gorm:"column:province;type:varchar(50);comment:省份/;not null;" json:"province"`                                   // 省份/
	City          string         `gorm:"column:city;type:varchar(30);comment:所市;not null;" json:"city"`                                            // 所市
	District      string         `gorm:"column:district;type:varchar(30);comment:区/县，地址所在的区县级行政区;not null;" json:"district"`                       // 区/县，地址所在的区县级行政区
	DetailAddress string         `gorm:"column:detail_address;type:varchar(50);comment:详细地址，包括街道、门牌号等具体位置信息;not null;" json:"detail_address"`      // 详细地址，包括街道、门牌号等具体位置信息
	ReceiverZip   string         `gorm:"column:receiver_zip;type:char(10);comment:所在地邮编;not null;" json:"receiver_zip"`                            // 所在地邮编
	IsDefault     bool           `gorm:"column:is_default;type:tinyint UNSIGNED;comment:是否为默认地址，1表示是默认地址，0表示非默认;default:0;" json:"is_default"`     // 是否为默认地址，1表示默认，0表示非默认
	CreatedAt     time.Time      `gorm:"column:created_at;type:datetime(3);comment:添加时间;not null;default:CURRENT_TIMESTAMP(3);" json:"created_at"` // 添加时间
	UpdatedAt     time.Time      `gorm:"column:updated_at;type:datetime(3);comment:修改时间;not null;default:CURRENT_TIMESTAMP(3);" json:"updated_at"` // 修改时间
	DeletedAt     gorm.DeletedAt `gorm:"column:deleted_at;type:datetime(3);comment:删除时间;default:NULL;" json:"deleted_at"`                          // 删除时间
}

func (a *Address) TableName() string {
	return "address"
}

// 收货地址添加
func (a *Address) AddressCreate() error {
	return inits.DB.Create(&a).Error
}

// 统计用户地址数量
func (a *Address) CountByUser(userID int64) (int64, error) {
	var count int64
	err := inits.DB.Model(&Address{}).Where("user_id = ?", userID).Count(&count).Error
	return count, err
}

// 收货地址列表
func (a *Address) AddressList() (list []*Address, err error) {
	err = inits.DB.Where("user_id = ?", a.UserId).Find(&list).Error
	return
}

// 收货地址删除
func (a *Address) AddressDelete() error {
	return inits.DB.Where("id = ?", a.Id).Delete(&a).Error
}
